var validate = {
	run: function(jq, rules){
		rules = rules.split('|');
		for (var k in rules) {
			var error = validate.valid(jq, rules[k]);
			if (jq.val()) {
				validate.showError(error, jq.closest('.formitm'));
			}
			if (error) {
				return error;
			}
		}
	},
	valid: function(jq, rule){
		var ruleData = rule.split(':');
		var func = ruleData[0];
		var params = ruleData[1];
		
		if (func === 'required') {
			if ( ! jq.val()) {
				return '必需填写';
			}
		}
		if ( ! jq.val()) {
			return '';
		}
		if (func === 'same') {
			if (jq.val() !== $('#'+params).val()) {
				return '两次输入不一致';
			}
		}
		if (func === 'ajax') {
			jq.closest('form').ajaxSubmit({
				dataType: 'json',
				success: function(r){
					if (r.data[jq.attr('name')]) {
						validate.showError(r.data[jq.attr('name')], jq.closest('.formitm'))
						return r.data[jq.attr('name')];
					}
				}
			});
		}
		if (func === 'username') {
			var re = new RegExp(/^[0-9]+$/);
			if (re.test(jq.val())) {
				return '不符合规则';
			}
			var re = new RegExp(/^[\u4E00-\u9FA5_a-zA-Z0-9\.]{2,16}$/);
			if ( ! re.test(jq.val())) {
				return '不符合规则';
			}
		}
		if (func === 'email') {
			var re = new RegExp(/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)+$/i);
			if ( ! re.test(jq.val())) {
				return '邮箱不正确';
			}
		}
	},
	showError: function(error, _g){
		if (error) {
			_g.removeClass('yes').addClass('no');
			_g.find('span.info').html(error);
		} else {
			_g.removeClass('no').addClass('yes');
			_g.find('span.info').html('&nbsp;');
		}
	}
};

$(function(){
	if (typeof(errors) === 'undefined') {
		errors = cmsg.data;
	}
	for (var k in errors) {
		var _g = $('.formitm input[name="'+k+'"]').closest('.formitm');
		_g.removeClass('yes').addClass('no');
		_g.find('span.info').html(errors[k]);
	}
	
	$('.j-captcha').click(function(){
		var _captcha = $(this).closest('.formitm').find('img.j-captcha');
		var url = _captcha.attr('src');
		_captcha.attr('src', urlArgs({v:Math.random()}, url));
	});
	
	$('input.j-change').change(function(){
		var _g = $(this).closest('.formitm');
		_g.removeAttr('data-class').removeAttr('data-info');;
		validate.run($(this), $(this).attr('data-validator'));
	}).focus(function(){
		var _g = $(this).closest('.formitm');
		if (_g.hasClass('yes')) {
			_g.attr('data-class', 'yes');
		} else if (_g.hasClass('no')) {
			_g.attr('data-class', 'no');
		}
		_g.attr('data-info', _g.find('span.info').html());
		_g.removeClass('no').removeClass('yes');
		_g.find('span.info').html('');
	}).blur(function(){
		var _g = $(this).closest('.formitm');
		if (_g.attr('data-class')) {
			_g.addClass(_g.attr('data-class'));
			_g.find('span.info').html(_g.attr('data-info'));
		}
		_g.removeAttr('data-class').removeAttr('data-info');
		if ( ! $(this).val() && $(this).attr('data-validator').indexOf('required') > -1) {
			_g.removeClass('yes').addClass('no');
			_g.find('span.info').html('必需填写');
		}
	});
});